<?php
    error_reporting(0); 
    require_once("condb.php");     
    require_once("functions/functions.php");     
    require_once('libs/nusoap.php');
    
    $server = new soap_server();
    
    $ns = "urn:WebServices";
    $server->configureWSDL("WebServices", $ns);
    $server->wsdl->schemaTargetNamespace = $ns;    
    
    $server->wsdl->addComplexType(
        'response'
        , 'complexType'
        , 'struct'
        , 'all'
        , ''
        , array(
            'status'=>array(
                'name'=>'status'
                , 'type'=>'xsd:int'
            ), 
            'msg'=>array(
                'name'=>'msg'
                , 'type'=>'xsd:string'
            ), 
            'length'=>array(
                'name'=>'length'
                , 'type'=>'xsd:int'
            ), 
            'title'=>array(
                'name'=>'title'
                , 'type'=>'xsd:string'
            )
        )
    );           
    
    $server->register(
        "getContent"
        , array("content"=>"xsd:string", "sender"=>"xsd:string", "serviceCode"=>"xsd:string", "transactionId"=>"xsd:string")
        , array("return"=> "tns:response")
//        , array("return"=> "xsd:string")
        , $ns
        , $ns . "#getContent"
        , "rpc"            
        , "encoded"
        , "Examination Results"  
    ); 
    
    $server->register(
        "active"
        , array("content"=>"xsd:string", "sender"=>"xsd:string", "serviceCode"=>"xsd:string", "transactionId"=>"xsd:string")
        , array("return"=> "tns:response")
        , $ns
        , $ns . "#active"
        , "rpc"            
        , "encoded"
        , "Examination Results"  
    );
       
    function active($content, $sender, $serviceCode, $transactionId)
    {
        $ip = getRealIpAddr();
        $IpPublic = IpPublic();
        if(in_array($ip, $IpPublic)){        
            $response = array();
            
            if(!in_array($serviceCode, listServiceCode())){
                $response["status"] = 4;
                $response["msg"] = "Tin nhan sai cu phap";                
            } else {
                if(preg_match("/KH(\s+)([a-z0-9]){4,25}/si", $content)) {
                    /* 
                    * Lấy username và kiểm tra xem có tồn tại username đó chưa
                    */
                    $data = explode(" ", $content);
                    $username = $data[1];
                    $user = getUserByUsername($username);                
                    
                    if(empty($user)){
                        $response["status"] = 2;
                        $response["msg"] = "Khong tim thay tai khoan trong he thong";                                        
                    } else {
                        if($user["active"]==1){
                            $response["status"] = 2;
                            $response["msg"] = "Tai khoan nay da duoc kich hoat";                                        
                        } else {
                            $result = activeUser($user["id"]);                        
                            $response["status"] = 1;
                            $response["msg"] = "Ban da kich hoat tai khoan thanh cong";
                        }
                    }
                } else {
                    $response["status"] = 3;
                    $response["msg"] = "Tin nhan sai cu phap";                
                }   
            }
        } else {
            $response["status"] = 5;            
            $response["msg"] = "Invalid Request";
            $response["length"] = strlen($response["msg"]);
            $response["title"] = "Taoviec.com";
        }        
        return $response;
    }       
    
    function getContent($content, $sender, $serviceCode, $transactionId)
    {
        $ip = getRealIpAddr();
        $IpPublic = IpPublic();
        if(in_array($ip, $IpPublic)){   
            $data = array();
            $data["content"] = preg_replace("/(\s+)/si", " ", $content);
            $data["content_original"] = $data["content"];
            $data["content"] = strtoupper($data["content"]);
            $data["sender"] = $sender;
            $data["serviceCode"] = $serviceCode;
            $data["transactionId"] = $transactionId;
            
            /* Kiểm tra transaction */
            $checkTransaction = CheckTransaction($transactionId);
            
            if($checkTransaction==0){
                if(!in_array($serviceCode, listServiceCode())){
                    
                    $response["status"] = 3;
                    $response["msg"] = "Tin nhan sai cu phap";    
                    $response["title"] = "";
                    
                    $data["userId"] = 0;    
                    $data["partnerId"] = 0;    
                    $data["type"] = 0;    
                    $data["id"] = 0;    
                    $data["output"] = "Tin nhan khong dung dau so quy dinh";    
                    $data["telco"] = checkTelco($data["sender"]);    
                    $data["price"] = priceServiceCode($data["serviceCode"]);    
                    $data["status"] = 0;    
                    $result = InsertSmsLog($data);
                } else {
                    if(preg_match("/GKT(\s+)(\d+)(\s+)(\d+)(\s+)[a-zA-Z0-9_]{1,}$/si", $data["content"]))
                    {
                        $data["type"] = 1;
                        $response = gameApp($data);
                    } 
                    else if(preg_match("/VKT(\s+)(\d+)(\s+)(\d+)(\s+)[a-zA-Z0-9_]{1,}$/si", $data["content"]))
                    {
                        $data["type"] = 2;                
                        $response = videoApp($data);
                    } 
                    else if(preg_match("/AKT(\s+)(\d+)(\s+)(\d+)(\s+)[a-zA-Z0-9_]{1,}$/si", $data["content"]))
                    {
                        $data["type"] = 3;
                        $response = imageApp($data);
                    } 
                    else 
                    {                    
                        $response["status"] = 2;
                        $response["msg"] = "Tin nhan sai cu phap";
                        $response["title"] = "";
                        
                        $data["status"] = 0;
                        $data["userId"] = 0;    
                        $data["partnerId"] = 0;    
                        $data["type"] = 0;    
                        $data["id"] = 0;    
                        $data["output"] = "Tin nhan sai cu phap";    
                        $data["telco"] = checkTelco($data["sender"]);    
                        $data["price"] = priceServiceCode($data["serviceCode"]);    
                        $data["output"] = $data["status"] . "|" . $data["transactionId"] . "|" . $data["output"];
                        $data["percent_wapmaster"] = 0;
                        $data["percent_partner"] = 0;
                                                
                        $result = InsertSmsLog($data);
                    }    
                }
            } else {
                $response["status"] = 5;
                $response["msg"] = "Trung transaction";
                $response["title"] = "";    
            }
                
            
            $response["length"] = strlen($response["msg"]);
            $response["title"] = $response["title"];
        } else {
            $response["status"] = 5;            
            $response["msg"] = "Invalid Request";    
            $response["length"] = strlen($response["msg"]);
            $response["title"] = "Taoviec.com";
        }       
        return $response;
    }
    
    /* xử lý khi tin nhắn được build từ app để lấy game */
    function gameApp($data)
    {        
        $cp = buildSyntaxApp($data["content"]);
        $data["cp"] = $cp["cp"];
        $data["id"] = $cp["id"];        
        $data["appRegisterId"] = $cp["appId"];        
        $data["refCode"] = $cp["refCode"];        
        
        /* Lấy userId */
        $user = getUser($data["refCode"]);
        if(empty($user)){
            $data["status"] = 0;
            $data["userId"] = 0;
            $data["output"] = "refCode không đúng";
            $data["title"] = "";
            $data["partnerId"] = 0;
            $data["percent_wapmaster"] = 0;
            $data["percent_partner"] = 0;    
        } else {
            $data["userId"] = $user["id"];
            
            /* Lấy file game để trả về */
            $gameInfo = getGameInfo($data["id"]);
            
            if(empty($gameInfo)){
                /* Không tìm thấy game */            
                $data["status"] = 0;
                $data["output"] = "Không tìm thấy game được yêu cầu";
                $data["title"] = "";
                $data["partnerId"] = 0;
                $data["percent_wapmaster"] = 0;
                $data["percent_partner"] = 0;                
            } else {
                /* 
                * Trả về cho khách hàng link download video 
                * mỗi lần kh download thì cộng lên 1
                * nếu lớn hơn 3 lần download ứng với 1 transactionId thì ko cho down
                */
            
                /* Insert vào bảng c_data_download */
                $dataDownloadId = InsertDataDownload($data);
                
                $data["status"] = 1;
                $data["output"] = linkDownloadGame($data["id"], $dataDownloadId, $data["userId"]);
                $data["title"] = $gameInfo["title_sms"];
                $data["partnerId"] = $gameInfo["partnerId"];
                $data["percent_wapmaster"] = $gameInfo["percent_wapmaster"];
                $data["percent_partner"] = $gameInfo["percent_partner"];                
            }
        }
        
        $data["price"] = priceServiceCode($data["serviceCode"]);
        $data["telco"] = checkTelco($data["sender"]);
         
        /* Insert vào bảng c_sms_log */
        $output = $data["output"];
        $data["output"] = $data["status"] . "|" . $data["transactionId"] . "|" . $data["output"];
        $result = InsertSmsLog($data);
                
        $response = array(); //mảng trả về
        $response["status"] = $data["status"];
        $response["msg"] = removeSign($output);
        $response["title"] = removeSign($data["title"]);
        
        $title_len = strlen($response["msg"]);
        if(strlen($response["title"]) > titleLen() - $title_len){
            $response["title"] = substr($response["title"], 0, titleLen() - $title_len);
        }
        return $response;        
    }
    
    /* xử lý khi tin nhắn được build từ app để lấy video */
    function videoApp($data)
    {
        $cp = buildSyntaxApp($data["content"]);
        $data["cp"] = $cp["cp"];
        $data["id"] = $cp["id"];        
        $data["appRegisterId"] = $cp["appId"];        
        $data["refCode"] = $cp["refCode"];        
        
        /* Lấy userId */
        $user = getUser($data["refCode"]);
        if(empty($user)){
            $data["status"] = 0;
            $data["userId"] = 0;
            $data["output"] = "refCode không đúng";
            $data["title"] = "";
            $data["partnerId"] = 0;    
        } else {
            $data["userId"] = $user["id"];        
            $data["partnerId"] = 1;
            
            /* Lấy file video để trả về */
            $videoInfo = getVideoInfo($data["id"]);
            
            if(empty($videoInfo)){
                /* Không tìm thấy video */            
                $data["status"] = 0;
                $data["output"] = "Không tìm thấy video được yêu cầu";
                $data["title"] = "";
            } else {
                /* 
                * Trả về cho khách hàng link download video 
                * mỗi lần kh download thì cộng lên 1
                * nếu lớn hơn 3 lần download ứng với 1 transactionId thì ko cho down
                */
            
                /* Insert vào bảng c_data_download */
                $dataDownloadId = InsertDataDownload($data);
                
                $data["status"] = 1;
                $data["output"] = linkDownloadVideo($data["id"], $dataDownloadId);
                $data["title"] = $videoInfo["title_sms"];
            }    
        }
            
        $data["price"] = priceServiceCode($data["serviceCode"]);
        $data["telco"] = checkTelco($data["sender"]);
        
        /* Insert vào bảng c_sms_log */
        $output = $data["output"];
        $data["output"] = $data["status"] . "|" . $data["transactionId"] . "|" . $data["output"];
        $data["percent_wapmaster"] = 0;
        $data["percent_partner"] = 0;
        $result = InsertSmsLog($data);
                
        $response = array(); //mảng trả về
        $response["status"] = $data["status"];
        $response["msg"] = removeSign($output);
        $response["title"] = removeSign($data["title"]);
        
        $title_len = strlen($response["msg"]);
        if(strlen($response["title"]) > titleLen() - $title_len){
            $response["title"] = substr($response["title"], 0, titleLen() - $title_len);
        }
        return $response;
    }
    
    /* xử lý khi tin nhắn được build từ app để lấy image */
    function imageApp($data)
    {
        $cp = buildSyntaxApp($data["content"]);
        $data["cp"] = $cp["cp"];
        $data["id"] = $cp["id"];        
        $data["appRegisterId"] = $cp["appId"];        
        $data["refCode"] = $cp["refCode"];        
        
        /* Lấy userId */
        $user = getUser($data["refCode"]);
        if(empty($user)){
            $data["status"] = 0;
            $data["userId"] = 0;
            $data["output"] = "refCode không đúng";
            $data["title"] = "";
            $data["partnerId"] = 0;    
        } else {
            $data["userId"] = $user["id"];        
            $data["partnerId"] = 1;
            
            /* Lấy file game để trả về */
            $albumInfo = getAlbumInfo($data["id"]);
            
            if(empty($albumInfo)){
                /* Không tìm thấy game */            
                $data["status"] = 0;
                $data["output"] = "Không tìm thấy Album được yêu cầu";
                $data["title"] = "";
            } else {
                /* 
                * Trả về cho khách hàng link đến trang list ảnh 
                * mỗi lần kh download 1 ảnh trong album thì cộng lên 1
                * nếu lớn hơn 3 lần download ứng với 1 transactionId thì ko cho down
                */
                
                /* Lấy tổng ảnh trong album */
                $totalImage = getTotalImageInAlbum($data["id"]);
                if($totalImage==0){
                    $data["status"] = 0;
                    $data["output"] = "Album này hiện chưa có ảnh nào";    
                    $data["title"] = "";
                } else {
                    /* Insert vào bảng c_data_download */
                    $dataDownloadId = InsertDataDownload($data);
                    
                    /* Insert vào bảng c_data_download_image */
                    $result = InsertDataDownloadImage($data);
                    
                    $data["status"] = 1;
                    $data["output"] = linkDownloadImage($data["id"], $dataDownloadId);   
                    $data["title"] = $albumInfo["title_sms"];
                }
            }    
        }
        
        $data["price"] = priceServiceCode($data["serviceCode"]);
        $data["telco"] = checkTelco($data["sender"]);
        
        /* Insert vào bảng c_sms_log */
        $output = $data["output"];
        $data["output"] = $data["status"] . "|" . $data["transactionId"] . "|" . $data["output"];
        $data["percent_wapmaster"] = 0;
        $data["percent_partner"] = 0;
        $result = InsertSmsLog($data);
                
        $response = array(); //mảng trả về
        $response["status"] = $data["status"];
        $response["msg"] = removeSign($output);
        $response["title"] = removeSign($data["title"]);
        
        $title_len = strlen($response["msg"]);
        if(strlen($response["title"]) > titleLen() - $title_len){
            $response["title"] = substr($response["title"], 0, titleLen() - $title_len);
        }
        return $response;
    }    
    
    function buildSyntax($content)
    {
        $content = explode(" ", $content);
        $cp = array();
        $cp["cp"] = $content[0];
        $cp["id"] = $content[1];
        return $cp;          
    }
    
    function buildSyntaxApp($content)
    {
        $content = explode(" ", $content);
        $cp = array();
        $cp["cp"] = $content[0];
        $cp["id"] = $content[1];
        $cp["appId"] = $content[2];
        $cp["refCode"] = $content[3];
        return $cp;          
    }        

    $HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : ""; 
    $server->service($HTTP_RAW_POST_DATA);
    exit();
?>
